package com.gp.learn.ssm.base.core.mybaits.interceptor;


import com.gp.learn.ssm.base.core.mybaits.Entity.EntityMap;
import com.gp.learn.ssm.base.core.mybaits.base.mapper.SuperMapper;
import com.gp.learn.ssm.base.core.mybaits.customwrapper.CriteriaSave;
import com.gp.learn.ssm.base.core.mybaits.model.ResultBody;

/**
 * 扩展保存拦截器
 *
 * @author zyf
 */
public interface SaveInterceptor<T> {


    /**
     * 条件验证
     *
     * @return
     */
    default ResultBody validate(CriteriaSave cs, EntityMap params) {
        return ResultBody.ok();
    }


    /**
     * 保存前预处理
     *
     * @param cs     对象模型
     * @param params 参数接收
     * @param entity 参数接收
     * @return
     */
    void prepare(CriteriaSave cs, EntityMap params, T entity);


    /**
     * 保存后扩展
     *
     * @return
     */
    default void complete(CriteriaSave cs, EntityMap params, T entity) {

    }


    /**
     * 返回保存对象
     *
     * @param cs         对象模型
     * @param requestMap 参数接收
     * @return
     */
    default <T> T getEntity(CriteriaSave cs, EntityMap requestMap) {
        return null;
    }

    /**
     * 返回自定义Mapper,当不使用自定义对象时可返回null
     *
     * @return
     */
    default SuperMapper getMapper() {
        return null;
    }


}
